#ifndef __WEBPAGESEARCH_H
#define __WEBPAGESEARCH_H
#include "servicecode/SplitTool.h"
#include "servicecode/LoadWebPage.h"
#include "nlohmann/json.hpp"
#include "Mylogger.hh"
#include <string>
#include <iostream>
#include <set>
#include <vector>
#include <sstream>
#include <map>
#include <mutex>

using std::cout;
using std::ostringstream;
using std::set;
using std::string;
using std::unordered_map;
using std::vector;
using json = nlohmann::json;

class WebPageSearch
{
public:
    WebPageSearch(const string &str);
    bool toSearch();
    string &getresult();

private:
    set<int> intersect_sets(const std::vector<std::set<int>> &sets);         // 计算每个set集合的交集
    map<string, double> calculateweights(const map<string, int> &frequents); // 将搜索词看成一篇文章，计算每个单词的权重（TF/IDF算法）
    void Consinesimilarity(const map<string, double> &standard,
                           const map<int, map<string, double>> &weights); // 进行文章相关度排序（余弦相似度算法）
    string safe_utf8_substr(const string &str, size_t max_length);        // 安全截取UTF8字符串
private:
    string _searchtrems;                                 // 搜索词
    multimap<double, int, std::greater<double>> _result; // 存放搜索结果，余弦值，id（降序）
    string _json_string;                                 // 存放json反序列化的搜索结果
};

#endif